<?xml version="1.0" encoding="UTF-8"?>
<doc>

<title>Dictionary 类</title>

<para>
<ptitle>Dictionary 类</ptitle>
　Dictionary 类是用来处理<kw>字典</kw>的类。<r/>
<r/>
　字典，或者称为<kw>关联数组</kw>，是指保存着若干个名字和其唯一对应的值组成的“pair”的对象。<r/>
　字典和数组一样使用 <kw>[ ]</kw> (间接成员选择) 运算符来操作，不同的是把下标索引换成字符串，也就是名字(键)。名字可以作为标识符，用 <kw>.</kw> (直接成员选择) 运算符来对字典中的元素进行操作。<r/>
　还有，选择了不存在的元素的话，会返回 void 。<r/>
　使用 delete 运算符可以删除字典中的元素。<r/>
<example>
	var d=new Dictionary();<r/>
	d["sat"] = 1; // 和 d.sat = 1 相同<r/>
	d["sun"] = 2; // 和 d.sun = 2 相同<r/>
	d["mon"] = 3; // 和 d.mon = 3 相同<r/>
	d["name"] ="value!"; // 和 d.name = "value!" 相同<r/>
	d["continue"] = 4; // 虽然 continue 不是有效的标识符，但是这样写没问题<r/>
	d.continue = 4; // 因为 continue 不是有效的标识符，这样写是错误的<r/>
<r/>
	var sat = d["sat"]; // 1 被代入到变量 sat 中<r/>
	var none = d["none"]; // void 被代入到变量 none 中<r/>
<r/>
	delete d.sat; // sat 被删除<r/>
	delete d["continue"]; // continue 被删除<r/>
</example>
<r/>
</para>


<para>
<ptitle>表达式声明字典</ptitle>
　<tt>使用<kw>%[ ]</kw></tt> ，可以在表达式中现场记述 <tt>Dictionary</tt> 类型的对象。以“元素名 =&gt; 元素的值”的形式，用逗号分隔，组成初始元素的表达式列举出来。例如，如果执行<r/>
<tt>
	var dic = %["a" =&gt; 1, "b" =&gt; 2, "c" =&gt; 3];<r/>
</tt>
　这样一个表达式，则变量 <tt>dic</tt> 将指向一个包含一个个的像 <tt>"a":1</tt>、 <tt>"b":2</tt>、 <tt>"c":3</tt>  这样的由名字和值成对组成的元素的 <tt>Dictionary</tt> 类型的对象。<r/>
　在内部，<tt>=&gt;</tt> 和逗号的作用是完全一样的，<tt>=&gt;</tt> 是为了便于阅读而设计的书写方式 ( 和 perl 一样 )。<r/>
</para>

<para>
<ptitle>对 Dictionary 类的方法的调用</ptitle>
　Dictionary 类型的对象在创建之后是任何一个成员都不包含的。(译者注：连方法都没有注册进去。我估计是因为 Dictionary 类型的对象中的所有元素都会被当作字典中的元素来处理。)<r/>
　例如，想要调用 assign 方法而对 Dictionary 类型的对象 dict 使用像 <tt>dict.assign(src)</tt> 的语法来操作的话，因为 dict 中不具备 assign 方法，这会产生错误。<r/>
　所以，应该使用 <kw>incontextof</kw> 运算符，把 Dictionary 类型的对象作为上下文，以直属于 Dictionary 类的方法对其进行操作。<r/>
<example>
	var a = %[];<r/>
	var b = %[];<r/>
	(Dictionary.assign incontextof a)(b); // 由 b 复制到 a <r/>
	(Dictionary.clear incontextof b)(); // 清除 b 的内容<r/>
</example>
</para>

<para>
<ptitle>saveStruct</ptitle>
　saveStruct 用来将结构化的数据输出到指定文件。<r/>
　请参照 <link href="array"/> 中的相同方法。<r/>
</para>

<para>
<ptitle>assign</ptitle>
　assign 方法用于字典的复制。<r/>
<bq>
構文 : assign(&lt;被复制的源字典&gt;, &lt;是否消除字典中原有的元素=true&gt;)<r/>
</bq>
　将作为参数指定的其他字典的内容全部复制进来。<r/>
　“是否消除字典中原有的元素”为假的时候，目的对象 (调用该方法的对象) 的内容并不会被清空，而是将源字典的内容覆盖进去。与原字典中名字相同的元素会被覆盖掉。<r/>
<r/>
　将数组 (Array类型的对象) 指定为被复制对象的时候，数组中的对象会依次以 “名字、值、名字、值……” 的顺序结成对，然后复制到字典中。(译者注：数组中充当名字的元素应该是字符串，否则会产生错误)<r/>
</para>

<para>
<ptitle>assignStruct</ptitle>
　assignStruct 方法同样用于字典的复制。<r/>
<bq>
構文 : assignStruct(&lt;被复制的源字典&gt;)<r/>
</bq>
　将作为参数指定的其他字典的内容全部复制进来。<r/>
　和 assign 方法不同，源字典的元素中的值是数组或字典的时候，会进行递归复制 ( assign 方法的话，只会复制元素中数组或字典的引用 )。<r/>
</para>

<para>
<ptitle>clear</ptitle>
　clear 方法用来将字典中的所有元素全部消除。<r/>
</para>


</doc>